/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 *
 * @author Enrique
 */
public class Nodo {
    
    // ATRIBUTOS
    
    private Ciudad ciudad;
    private double g;  // valor g (costo de viaje) del nodo (en minutos)
    private double h;  // valor h (funcion heuristica) del nodo (en minutos)
    private double f;  // valor f (costo total) del nodo (en minutos)
    private Nodo nodoPadre; //nodo desde el cual se llego a este nodo
    private Arista aristaPadre; // ultima arista que se recorrio para llegar a este nodo
    private List<Arista> listaAristasOrigen = new ArrayList<Arista>();    //lista de aristas que tienen como origen a este nodo
    private Date fechaLlegada;   //la hora en que se llego a este nodo
    
    // CONSTRUCTORES

    public Nodo() {
    }

    public Nodo(Ciudad ciudad, double g, double h, double f, Nodo nodoPadre, List<Arista> listaAristarOrigen) {
        this.ciudad = ciudad;
        this.g = g;
        this.h = h;
        this.f = f;
        this.nodoPadre = nodoPadre;
        this.listaAristasOrigen = listaAristasOrigen;
    }
    
    // SETTERS Y GETTERS

    public Date getFechaLlegada() {
        return fechaLlegada;
    }

    public void setFechaLlegada(Date fechaLlegada) {
        this.fechaLlegada = fechaLlegada;
    }    
    
    public Arista getAristaPadre() {
        return aristaPadre;
    }

    public void setAristaPadre(Arista aristaPadre) {
        this.aristaPadre = aristaPadre;
    }
      
    public Ciudad getCiudad() {
        return ciudad;
    }

    public void setCiudad(Ciudad ciudad) {
        this.ciudad = ciudad;
    }

    public double getG() {
        return g;
    }

    public void setG(double g) {
        this.g = g;
    }

    public double getH() {
        return h;
    }

    public void setH(double h) {
        this.h = h;
    }

    public double getF() {
        return f;
    }

    public void setF(double f) {
        this.f = f;
    }

    public Nodo getNodoPadre() {
        return nodoPadre;
    }

    public void setNodoPadre(Nodo nodoPadre) {
        this.nodoPadre = nodoPadre;
    }

    public List<Arista> getListaAristasOrigen() {
        return listaAristasOrigen;
    }

    public void setListaAristasOrigen(List<Arista> listaAristasOrigen) {
        this.listaAristasOrigen = listaAristasOrigen;
    }
    
    // METODOS
    
       
    //metodo para buscar el nodo cuyo oaci es el del parametro
    public static Nodo buscarNodoPorOaci(String oaci,List<Nodo> listaNodos){
        for (int i=0; i<listaNodos.size(); i++){
            if (listaNodos.get(i).getCiudad().getOaci().equals(oaci)){
                return listaNodos.get(i);
            }
        }
        return null;
    }
    
    
    //metodo para buscar el nodo cuyo oaci es el del parametro
    public static Nodo buscarNodoPorAbrev(String abrev, List<Nodo> listaNodos){
        for (int i=0; i<listaNodos.size(); i++){
            if (listaNodos.get(i).getCiudad().getAbreviacion().equals(abrev)){
                return listaNodos.get(i);
            }
        }
        return null;
    }
    
}
